International Business Machines Corporation (IBM) has marketed for the last several years different systems of personal computers that have evolved from single task systems into multitasking systems. Such evolution involved changes in both the hardware and software while maintaining an upwards compatibility throughout the newer systems for running old application programs. Early systems included a BIOS and a personal computer disk operating system (PC/DOS) that interacted with the application program through several software interrupt routines that relieved the application programmer from having to write or create routines common to many different application programs. BIOS was intended to provide routines for controlling operation of the major I/O devices and relieve the application programmer from concern about hardware device characteristics. The recommended manner of invoking or transferring control to the DOS or BIOS routines was to use the well known INT instruction.
BIOS was intended to be invoked by loading the microprocessor's registers with parameters and issuing an INT instruction. Some application programs developed for the IBM PC and XT systems access BIOS in an unprescribed manner. Such application programs are referred to as ill-behaved and use the microprocessor register conventions to pass parameters but use a different invocation method. First, the application programs setup the required return parameters on a stack. Second, the application programs load the microprocessor registers with parameters depending on the BIOS function requested. Then, the programs either jump or call BIOS via its physical address (commonly referred to as a "hard coded" address) in ROM memory. The BIOS memory area was expanded on the IBM AT system. It was not possible to keep the individual BIOS routines or instructions at the same starting address as in prior systems. Directly accessing BIOS by using hard coded addresses caused these applications problems when BIOS entry point addresses changed because the jump would be to an undesired sequence of instructions or into the middle of an instruction or data where the microprocessor would erroneously interpret the target locations as an instruction. To ensure transportability of applications from the early systems to the more recent IBM PS/2 systems, the old locations corresponding to the old entry points, contain hard coded jump instructions to transfer control to the new locations of the entry points. The areas in memory which have the hard coded jumps are referred to as protected entry points.
The IBM OS/2 operating system is a multitasking operating system developed for different computers including IBM PS/2 models 50-80 computers and the IBM AT system. The use of protected entry points has been found to create a problem for such operating system. The OS/2 system maintains a PC/DOS environment. This allows customers to run old PC/DOS applications under, and provides a migration path to, the OS/2 system. In order to run protect mode operations in the background and control foreground operations in the PC/DOS environment, the OS/2 system must have full control and ownership of all system resources. To accomplish such control, the operating system intercepts all BIOS requests through the interrupt vectors and thereby controls access to system resources. If an application, executing in the PC/DOS environment, directly accesses a BIOS routine via one of the protected entry points, the system may hang or act unpredictably where the BIOS routine or a device operation has already been invoked by some other application program or requestor. The BIOS routines are not reentrant because the BIOS work areas will only support a single request at any one time, and some devices cannot handle concurrent operations. Therefore, when an application program jumps directly to a BIOS routine by use of a hard coded address, such process is transparent to the operating system and sets up the potential situation of two different programs accessing the same system resource at the same time when in fact only one program can do so. Note that IBM, AT, PS/2, and OS/2 are trademarks of International Business Machines Corporation.